Functional API(build model)

keras의 Sequential 클래스로 여러 개의 층을 가진 연결 신경망을 만드는 방법은
간편하고 일반적인 방법이지만, 여러 개의 입력이나 출력을 가지거나 중간 가지(branch)가 있는 복잡한 모델을 만들 수 없다.
케라스 함수형 API(functional API)를 이용해서 보다 복잡한 모델을 만들 수 있다.
함수형 방식(functional API)
tf.random.set_seed(1)
#
inputs=tf.keras.Input(shape=(2,))
#
h1=tf.keras.layers.Dense(units=4, activation='relu')(inputs)
h2=tf.keras.layers.Dense(units=4, activation='relu')(h1)
h3=tf.keras.layers.Dense(units=4, activation='relu')(h2)
#
outputs=tf.keras.layers.Dense(units=1, activation='sigmoid')(h3)
#
model=tf.keras.Model(inputs=inputs, outputs=outputs)
model.summary()

Model: "model"

_________________________________________________________________

Layer (type)                 Output Shape              Param #   

=================================================================

input_1 (InputLayer)         [(None, 2)]               0         

_________________________________________________________________

dense_9 (Dense)              (None, 4)                 12        

_________________________________________________________________

dense_10 (Dense)             (None, 4)                 20        

_________________________________________________________________

dense_11 (Dense)             (None, 4)                 20        

_________________________________________________________________

dense_12 (Dense)             (None, 1)                 5         

=================================================================

Total params: 57

Trainable params: 57

Non-trainable params: 0

_________________________________________________________________

컴파일(compile) & 훈련(fit)
model.compile(
optimizer=tf.keras.optimizers.SGD(),
loss=tf.keras.losses.BinaryCrossentropy(),
metrics=[tf.keras.metrics.BinaryAccuracy()])
hist=model.fit(
x_train, y_train, validation_data=(x_valid, y_valid), epochs=200, batch_size=2, verbose=0)